package com.trkj.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.trkj.pojo.Emp;
import com.trkj.service.DeptService;
import com.trkj.utils.DataGrid;
import com.trkj.vo.CreatePositionVo;
import com.trkj.vo.DeptInfoVo;
import com.trkj.vo.DeptPositionVo;
import com.trkj.vo.DeptVo;
import com.trkj.vo.EmpRoleVo;
import com.trkj.vo.EmpVo;
import com.trkj.vo.PositionInfoVo;

/**
 * 部门管理controller
 * @author 吴山峰
 *
 */
@Controller
@SessionAttributes({"emp", "funcIds"})
public class DeptController {
	@Autowired
	DeptService deptService;
	
	/**
	 * 前往部门管理DeptInfo.jsp页面
	 */
	@RequestMapping("/to_DeptInfo")
	public String toDeptInfo() {
		return "DeptInfo";
	}
	/**
	 * 前往部门管理DeptInfo.jsp页面
	 */
	@RequestMapping("/to_DeptAndPositionManager")
	public String toDeptAndPositionManager() {
		return "deptAndPositionManager";
	}
	/**
	 * 前往创建部门CreateDept.jsp页面
	 */
	@RequestMapping("/to_CreateDept")
	public String toCreateDept() {
		return "CreateDept";
	}
	/**
	 * 前往为部门添加员工deptAddEmp.jsp页面
	 */
	@RequestMapping("/to_DeptAddEmp")
	public String toDeptAddEmp() {
		return "deptAddEmp";
	}
	/**
	 * 前往职位管理positionInfo.jsp页面
	 */
	@RequestMapping("/to_PositionInfo")
	public String toPositionInfo() {
		return "positionInfo";
	}
	/**
	 * 前往新增职位createPosition.jsp页面
	 */
	@RequestMapping("/to_CreatePosition")
	public String toCreatePosition() {
		return "createPosition";
	}
	/**
	 * 前往新增职位createPosition.jsp页面
	 */
	@RequestMapping("/to_DeptDescInfo")
	public String toDeptDescInfo() {
		return "deptDescInfo";
	}
	
	/**
	 * 前往职位管理xposition.jsp页面
	 */
	@RequestMapping("/to_Position")
	public String toPosition() {
		return "position";
	}
	/**
	 * 前往职位添加员工
	 * @return 
	 */
	@RequestMapping("/to_PositionAddEmp")
	public String toPositionAddEmp() {
		return "positionAddEmp";
	}
	/**
	 * 前往职位详情positionDescInfo.jsp页面
	 * @return 
	 */
	@RequestMapping("/to_PositionDescInfo")
	public String toPositionDescInfo() {
		return "positionDescInfo";
	}
	
	/**
	 * 查询所有的部门信息/按条件查询
	 */
	@RequestMapping("/get_AllDept")
	@ResponseBody
	public DataGrid findAllDeptInfo(String deptname, Integer page, Integer rows, 
			@RequestParam(required=false,defaultValue="deptId") String sort,
			@RequestParam(required=false,defaultValue="desc") String order) {
		return deptService.findAllDeptInfo(deptname, page, rows, sort, order);
	}
	/**
	 * 按部门编号查询除该部门外的其他部门--
	 * @return 
	 */
	@RequestMapping("/get_OtherDept")
	@ResponseBody
	public List<DeptVo> findOtherDeptById(Integer deptid) {
		return deptService.findOtherDeptById(deptid);
	}
	/**
	 * 查询所有部门--用于新建部门选择上级部门
	 */
	@RequestMapping("/get_AllEasyDept")
	@ResponseBody
	public List<DeptVo> findAllEasyDept() {
		return deptService.findAllEasyDept();
	}
	/**
	 * 根据部门编号查询该个部门下面的所有员工
	 * @return 
	 */
	@RequestMapping("/get_DeptAllEmp")
	@ResponseBody
	public List<Emp> findDeptAllEmp(Integer deptid) {
		return deptService.findDeptAllEmp(deptid);
	}
	/**
	 * 查询未分配部门的员工 ，已经分配部门的员工不可以再次进行分配
	 */
	@RequestMapping("/get_NotDeptEmp")
	@ResponseBody
	public List<EmpVo> findNotDeptEmp() {
		return deptService.findNotDeptEmp();
	}
	/**
	 * 查询该部门下职位编制未满的职位，
	 */
	@RequestMapping("/get_DeptPosition")
	@ResponseBody
	public List<DeptPositionVo> findDeptPosition(Integer deptid) {
		return deptService.findDeptPosition(deptid);
	}
	/**
	 * 查询部门下职位编制未满的职位数量 是否大于0
	 */
	@RequestMapping("/get_DeptPositionnumber")
	@ResponseBody
	public boolean findDeptPositionNumber(Integer deptid) {
		return deptService.findDeptPositionNumber(deptid);
	}
	/**
	 * 分配员工到部门
	 */
	@RequestMapping("/give_DeptIsEmp")
	@ResponseBody
	public boolean giveDeptIsEmp(Integer deptid, Integer empid, Integer positionid) {
		return deptService.giveDeptIsEmp(deptid, empid, positionid);
	}
	/**
	 * 重新分配部门的员工
	 * @return 
	 */
	@RequestMapping("/give_empToDept")
	@ResponseBody
	public boolean addEmpToDept(Integer deptid, String empids) {
		return deptService.addEmpToDept(deptid, empids);
	}
	/**
	 * 根据员工id查询该员工是否有职务，有则返回职务，没有返回空
	 */
	@RequestMapping("/find_PositionByEmpId")
	@ResponseBody
	public DeptPositionVo queryPositionByEmpId(Integer empid) {
		return deptService.queryPositionByEmpId(empid);
	}
	/**
	 * 新增部门/编辑部门
	 */
	@RequestMapping("/edit_adds_Dept")
	@ResponseBody
	public boolean addNewDept(DeptInfoVo deptInfo) {
		return deptService.addNewDept(deptInfo);
	}
	/**
	 * 删除部门
	 */
	@RequestMapping("/remove_Dept")
	@ResponseBody
	public boolean removeDept(Integer deptid) {
		return deptService.removeDept(deptid);
	}
	

	/**
	 * 查询所有部门以及部门下面的职位
	 */
	@RequestMapping("/find_AllDeptAndPositon")
	@ResponseBody
	public Object queryDeptAndPosition() {
		return deptService.queryDeptAndPosition();
	}
	/**
	 * 根据部门id查询该部门下的职位
	 * @return 
	 */
	@RequestMapping("/find_PositionByDeptId")
	@ResponseBody
	public List<PositionInfoVo> queryPositionByDeptId(Integer deptid) {
		return deptService.queryPositionByDeptId(deptid);
	}
	/**
	 * 新增职位String positionDesc, Integer positionLevel, 
			  String positionName, Integer positionNumber, Integer positionOrgan, String superPosition
	 */
	@RequestMapping("/give_addNewPosition")
	@ResponseBody
	public boolean addNewPosition(Integer positionId,String positionDesc, Integer positionLevel, String positionName
									, Integer deptid, Integer positionOrgan, Integer superPosition) {
		System.err.println(positionId+positionDesc+positionLevel+positionName+positionOrgan+superPosition+deptid);
		return deptService.addNewPosition(positionId, positionDesc, positionLevel, positionName, positionOrgan, superPosition, deptid);
	}
	/**
	 * 查询等级大于当前等级的职位--编辑职位的时候下拉框用到
	 */
	@RequestMapping("/find_LevelMaxPosition")
	@ResponseBody
	public List<CreatePositionVo> queryLevelMaxPosition(Integer level) {
		return deptService.queryLevelMaxPosition(level);
	}
	/**
	 * 删除职位
	 * @return 
	 */
	@RequestMapping("/remove_DeptPosition")
	@ResponseBody
	public boolean removeDeptPosition(Integer position) {
		return deptService.removeDeptPosition(position);
	}
	/**
	 * 根据部门id查询该部门下的所有员工
	 */
	@RequestMapping("/find_DeptAllEmpInfo")
	@ResponseBody
	public List<EmpRoleVo> queryDeptAllEmpInfo(Integer deptid) {
		return deptService.queryDeptAllEmpInfo(deptid);
	}
	/**
	 * 查询所有部门
	 */
	@RequestMapping("/find_AllDept")
	@ResponseBody
	public List<DeptVo> queryAllDept() {
		return deptService.queryAllDept();
	}
	/**
	 * 根据部门id查询部门下面的职位
	 */
	@RequestMapping("/find_AllPosition")
	@ResponseBody
	public DataGrid queryPositionInfoByDeptId(Integer deptid, String posname, Integer page, Integer rows) {
		return deptService.findAllPositionInfo(deptid, posname, page, rows);
	}
	/**
	 * 查询部门下面没有职位的员工       
	 */
	@RequestMapping("/find_DeptNotPositionEmp")
	@ResponseBody
	public List<EmpVo> queryDeptNotPositionEmp(Integer deptid) {
		return deptService.queryDeptNotPositionEmp(deptid);
	}
	/**
	 * 给职位增加员工
	 * @return 
	 */
	@RequestMapping("/give_EmpToPosition")
	@ResponseBody
	public boolean giveEmpToPosition(Integer psoid, String empids) {
		return deptService.giveEmpToPosition(psoid, empids);
	}
	/**
	 * 根据职位id查询拥有该职位的员工
	 */
	@RequestMapping("/find_EmpByPositionId")
	@ResponseBody
	public List<EmpVo> queryEmpByPositionId(Integer posid) {
		return deptService.queryEmpByPositionId(posid);
	}
}
